package main.java.br.com.projeto.domain.entity;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;


@Entity
public class Produto extends EntityAbstract{

	/**
	 * 
	 */
	private static final long serialVersionUID = -8759060097250798223L;

	@Column(length=30, nullable=false)
	private String descricao;

	@Enumerated(EnumType.ORDINAL)
	private Unidade unidade;

	private Float valorCusto;

	private Float valorVenda;

	@ManyToOne(fetch=FetchType.LAZY, optional=false)
	private Grupo grupo;

	private Integer estoqueAtual;

	private Integer estoqueMinimo;

	@Column(length=25)
	private String codigoBarras;
	
	@Column(length=25)
	private String marca;
	
	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name="produto_fornecedor",
		joinColumns={@JoinColumn(name="produto_id")},
		inverseJoinColumns={@JoinColumn(name="fornecedor_id")})
	private List<Fornecedor> fornecedores;
	
	private String infosTecnicas;
	
	private String restricoes;

	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Unidade getUnidade() {
		return unidade;
	}
	public void setUnidade(Unidade unidade) {
		this.unidade = unidade;
	}
	public Float getValorCusto() {
		return valorCusto;
	}
	public void setValorCusto(Float valorCusto) {
		this.valorCusto = valorCusto;
	}
	public Float getValorVenda() {
		return valorVenda;
	}
	public void setValorVenda(Float valorVenda) {
		this.valorVenda = valorVenda;
	}
	public Grupo getGrupo() {
		return grupo;
	}
	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}
	public Integer getEstoqueAtual() {
		return estoqueAtual;
	}
	public void setEstoqueAtual(Integer estoqueAtual) {
		this.estoqueAtual = estoqueAtual;
	}
	public Integer getEstoqueMinimo() {
		return estoqueMinimo;
	}
	public void setEstoqueMinimo(Integer estoqueMinimo) {
		this.estoqueMinimo = estoqueMinimo;
	}
	public String getCodigoBarras() {
		return codigoBarras;
	}
	public void setCodigoBarras(String codigoBarras) {
		this.codigoBarras = codigoBarras;
	}

	public String getMarca() {
		return marca;
	}
	public void setMarca(String marca) {
		this.marca = marca;
	}
	public List<Fornecedor> getFornecedores() {
		return fornecedores;
	}
	public void setFornecedores(List<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}
	
	public String getInfosTecnicas() {
		return infosTecnicas;
	}
	public void setInfosTecnicas(String infosTecnicas) {
		this.infosTecnicas = infosTecnicas;
	}
	public String getRestricoes() {
		return restricoes;
	}
	public void setRestricoes(String restricoes) {
		this.restricoes = restricoes;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj) 
			return true;
	
		Produto other = (Produto) obj;
		
		if (id == other.getId())
			return true;
		
		return false;
	}	
}
